﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
#include<string>
#include<vector>
#include"MyMap.h"
#include"MySet.h"
#include"RBTree.h"


////int main()
////{
////	//int a[] = { 16, 3, 7, 11, 9, 26, 18, 14, 15 };
////	int a[] = { 4, 2, 6, 1, 3, 5, 15, 7, 16, 14 };
////	RBTree<int, int> t;
////	for (auto e : a)
////	{
////		t.Insert(make_pair(e, e));
////	}
////	t.InOrder();
////
////	cout << t.IsBalance() << endl;
////
////	return 0;
////}
//
//int main()
//{
//	const int N = 10000;
//	vector<int> v;
//	v.reserve(N);
//	srand(time(0));
//
//	for (size_t i = 0; i < N; i++)
//	{
//		v.push_back(rand() + i);
//		//cout << v.back() << endl;
//	}
//
//	size_t begin2 = clock();
//	RBTree<int, int> t;
//	for (auto e : v)
//	{
//		if (e == 29365)
//		{
//			int i = 0;
//		}
//
//		t.Insert(make_pair(e, e));
//		//cout << "Insert:" << e << "->" << t.IsBalance() << endl;
//	}
//	size_t end2 = clock();
//
//	cout << "Insert:" << end2 - begin2 << endl;
//
//	cout << t.IsBalance() << endl;
//	cout << t.Height() << endl;
//	cout << t.Size() << endl;
//
//	size_t begin1 = clock();
//	for (auto e : v)
//	{
//		t.Find(e);
//	}
//
//
//	for (size_t i = 0; i < N; i++)
//	{
//		t.Find((rand() + i));
//	}
//
//	size_t end1 = clock();
//
//	cout << "Find:" << end1 - begin1 << endl;
//
//	return 0;
//}


void test_set()
{
	tai::set<int> s;
	s.insert(4);
	s.insert(1);
	s.insert(2);
	s.insert(3);
	s.insert(2);
	s.insert(0);
	s.insert(10);
	s.insert(5);

	tai::set<int>::Iterator it = s.begin();
	while (it != s.end())
	{
		//bug: key能够修改
		//*it += 1;

		cout << *it << " ";
		++it;
	}
	cout << endl;

	// bug : key能够修改
	//it = s.begin();
	//*it = 100;

	it = s.rbegin();
	while (it != s.rend())
	{
		//bug: key能够修改
		//*it += 1;

		cout << *it << " ";
		--it;
	}
	cout << endl;

	/*for (auto e : s)
	{
		cout << e << " ";
	}
	cout << endl;*/
}


//void test_map()
//{
//	tai::map<string, string> dict;
//	dict.insert(make_pair("sort", "排序"));
//	dict.insert(make_pair("sort", "xx"));
//	dict.insert(make_pair("left", "左边"));
//	dict.insert(make_pair("right", "右边"));
//
//	//tai::map<string, string>::Iterator it = dict.begin();
//	//while (it != dict.end())
//	//{
//	//	 //key޸
//	//	//it->first += 'x';
//	//	//it->second += 'y';
//
//	//	cout << it->first << ":" << it->second << endl;
//	//	++it;
//	//}
//	//cout << endl;
//
//	string arr[] = { "苹果", "香蕉","苹果", "桃子", "香蕉", "西瓜", "苹果",
//					 "苹果", "桃子", "苹果", "香蕉", "苹果", "香蕉" };
//	tai::map<string, int> countMap;
//	for (auto& e : arr)
//	{
//		countMap[e]++;
//	}
//
//	for (auto& kv : countMap)
//	{
//		cout << kv.first << ":" << kv.second << endl;
//	}
//	cout << endl;
//
//	tai::map<string,int>::Iterator it = countMap.rbegin();
//	while (it != countMap.rend())
//	{
//		//bug: key能够修改
//		//*it += 1;
//
//		cout << (*it).first << ":" << (*it).second << endl;
//		--it;
//	}
//	cout << endl;
//}

int main()
{
	//test_map();
	test_set();

	return 0;
}
